package com.company.oa.common.service;

/**
 * 消息服务接口
 */
public interface MessageService {
    
    /**
     * 发送系统消息给指定用户
     *
     * @param title 消息标题
     * @param content 消息内容
     * @param link 关联链接
     * @param userId 接收用户ID
     * @return 是否发送成功
     */
    boolean sendSystemMessage(String title, String content, String link, Long userId);
    
    /**
     * 发送系统消息给指定部门
     *
     * @param title 消息标题
     * @param content 消息内容
     * @param link 关联链接
     * @param departmentId 部门ID
     * @return 是否发送成功
     */
    boolean sendSystemMessageToDepartment(String title, String content, String link, Long departmentId);
    
    /**
     * 发送系统消息给指定角色
     *
     * @param title 消息标题
     * @param content 消息内容
     * @param link 关联链接
     * @param roleId 角色ID
     * @return 是否发送成功
     */
    boolean sendSystemMessageToRole(String title, String content, String link, Long roleId);
    
    /**
     * 发送系统消息给所有用户
     *
     * @param title 消息标题
     * @param content 消息内容
     * @param link 关联链接
     * @return 是否发送成功
     */
    boolean sendSystemMessageToAll(String title, String content, String link);
    
    /**
     * 发送业务消息
     *
     * @param title 消息标题
     * @param content 消息内容
     * @param link 关联链接
     * @param type 业务类型
     * @param businessId 业务ID
     * @param userId 接收用户ID
     * @return 是否发送成功
     */
    boolean sendBusinessMessage(String title, String content, String link, String type, Long businessId, Long userId);
    
    /**
     * 标记消息为已读
     *
     * @param messageId 消息ID
     * @param userId 用户ID
     * @return 是否标记成功
     */
    boolean markAsRead(Long messageId, Long userId);
    
    /**
     * 删除消息
     *
     * @param messageId 消息ID
     * @param userId 用户ID
     * @return 是否删除成功
     */
    boolean deleteMessage(Long messageId, Long userId);
}